package 时间类

import (
	"gitee.com/go_888/extends/carbon/calendar/julian"
	"gitee.com/go_888/extends/carbon/calendar/lunar"
	"gitee.com/go_888/extends/carbon/calendar/persian"
)

// Lunar converts Carbon instance to X转换到农历日期 instance.
// 将 Carbon 实例转化为 X转换到农历日期 实例
func (c *Carbon) X转换到农历日期() *lunar.Lunar {
	if c.X是否为空时间() {
		return nil
	}
	if c.X是否有错误() {
		l := new(lunar.Lunar)
		l.Error = c.X错误
		return l
	}
	return lunar.FromStdTime(c.X取Gosdk时间())
}

// CreateFromLunar creates a Carbon instance from Lunar date.
// 从 农历日期 创建 Carbon 实例
func X创建并按农历日期(年, 月, 日 int, 闰月 bool) *Carbon {
	l := lunar.NewLunar(年, 月, 日, 闰月)
	if !l.IsValid() {
		return nil
	}
	return X创建(l.ToGregorian(DefaultTimezone).Time)
}

// Julian converts Carbon instance to X转换到儒略日 instance.
// 将 Carbon 实例转化为 X转换到儒略日 实例
func (c *Carbon) X转换到儒略日() *julian.Julian {
	if c.X是否为空时间() {
		return nil
	}
	if c.X是否有错误() {
		return new(julian.Julian)
	}
	return julian.FromStdTime(c.X取Gosdk时间())
}

// CreateFromJulian creates a Carbon instance from Julian Day or Modified Julian Day.
// 从 儒略日/简化儒略日 创建 Carbon 实例
func X创建并按儒略日(f float64) *Carbon {
	return X创建(julian.NewJulian(f).ToGregorian(DefaultTimezone).Time)
}

// Persian converts Carbon instance to X转换到波斯日期 instance.
// 将 Carbon 实例转化为 X转换到波斯日期 实例
func (c *Carbon) X转换到波斯日期() *persian.Persian {
	if c.X是否为空时间() {
		return nil
	}
	if c.X是否有错误() {
		p := new(persian.Persian)
		p.Error = c.X错误
		return p
	}
	return persian.FromStdTime(c.X取Gosdk时间())
}

// CreateFromPersian creates a Carbon instance from Persian date.
// 从 波斯日期 创建 Carbon 实例
func X创建并按波斯日期(年, 月, 日 int) *Carbon {
	p := persian.NewPersian(年, 月, 日)
	if !p.IsValid() {
		return nil
	}
	return X创建(p.ToGregorian(DefaultTimezone).Time)
}
